/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.gorkemozbek.rubic.util.struct

trait Functor[T] extends PartialFunction[Struct, T]

trait GenericFunctor[T] extends Functor[T] {

  final def isDefinedAt(s: Struct) = true

}

trait Predicate extends Functor[Boolean]

trait GenericPredicate extends GenericFunctor[Boolean]

trait View[T] extends Functor[T]

trait GenericView[T] extends GenericFunctor[T]

trait Operation[T] extends Functor[T]

trait GenericOperation[T] extends GenericFunctor[T]

